package me.out1kiss.www;

import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;

/**
 * 快速排序
 * 首先举个例子5,4,6,7,1这样一个顺序的数组.
 * 取首个数字作为对比数，分别对比左右数据，当左边数据比它大时候，右边下标减一，并起更新数据。左边同理
 * 最后当左边和右边下标相同时，替换这个为对比数。这样就会出现，对比数左边是比他小的，右边是大于它的。
 * 左右两边再用同样的方式算
 */
public class Qsort {

    public static void sort(int a[], int low, int hight) {
        int i, j, index;
        if (low > hight) {
            return;
        }
        i = low;
        j = hight;
        index = a[i];
        while (i < j) {
            while (i < j && a[j] >= index)
                j--;
            if (i < j)
                a[i++] = a[j];
            while (i < j && a[i] < index)
                i++;
            if (i < j)
                a[j--] = a[i];
        }
        a[i] = index;
        sort(a, low, i - 1);
        sort(a, i + 1, hight);

    }

    public static void quickSort(int[] a) {
        sort(a, 0, a.length - 1);
    }

    public static void main(String[] args) {
        int count = 10;
        int[] a = new int[count];
        Set<Integer> set = new LinkedHashSet<>();
        int i = 0;
        while (i < count) {
            int num = (int) (Integer.MAX_VALUE * Math.random());
            if (set.add(num)) {
                a[i] = num;
                i ++;
            }
        }
        quickSort(a);
        System.out.println(a.length);
        System.out.println(Arrays.toString(a));
    }
}
